#include "stdafx.h"
#include <LitListener.h>

namespace Lit
{	
#ifndef LIT_STANDALONE
	Listener::Listener( const String & name, const ListenerTypes& type ) : Named(name), mType(type){}
#else
	Listener::Listener( const String & name ) : Named(name){}
#endif
	Listener::Listener( const Listener& rk ) 
		: Named(rk)
#ifndef LIT_STANDALONE
		, mType(rk.mType)
#endif
	{}
	Listener::~Listener(){}
	
#ifndef LIT_STANDALONE
    bool Listener::frameStarted(const Ogre::FrameEvent& evt){ (void)evt; return true; }
	bool Listener::frameRenderingQueued(const Ogre::FrameEvent& evt){ (void)evt; return true; }
	bool Listener::frameEnded(const Ogre::FrameEvent& evt){ return true; }

	void Listener::loadingComplete(Ogre::Resource*) {}
	void Listener::preparingComplete(Ogre::Resource*) {}
	void Listener::unloadingComplete(Ogre::Resource*) {}

    void Listener::messageLogged( const Ogre::String& message, Ogre::LogMessageLevel lml, bool maskDebug, const Ogre::String &logName, bool& skipThisMessage ){}

	void Listener::windowMoved(Ogre::RenderWindow* rw){ (void)rw; }
	void Listener::windowResized(Ogre::RenderWindow* rw){ (void)rw; }
	bool Listener::windowClosing(Ogre::RenderWindow* rw){ (void)rw; return true; }
	void Listener::windowClosed(Ogre::RenderWindow* rw){ (void)rw; }
	void Listener::windowFocusChange(Ogre::RenderWindow* rw){ (void)rw; }
#endif
	ListenerManager::ListenerManager( ){}
	ListenerManager::ListenerManager( const ListenerManager& rk ) : mListeners( rk.mListeners ){}
	ListenerManager::ListenerManager( const MyType& rk ) : mListeners( rk ){}
	ListenerManager::~ListenerManager(){ clear(); }

	ListenerManager::MyType& ListenerManager::listeners(){ return mListeners; }
	const ListenerManager::MyType& ListenerManager::listeners() const{ return mListeners; }
	
	void ListenerManager::registerListener( ListenerPtr ptr ){ if( !hasListener(ptr) ) mListeners.push_back(ptr); }
	void ListenerManager::removeListener( ListenerPtr ptr ){ if( hasListener(ptr) ) mListeners.erase( findListener( ptr ) ); }
	bool ListenerManager::hasListener( ListenerPtr ptr ) const{ return findListener(ptr)!=mListeners.end(); }

	ListenerManager::ListenerIter ListenerManager::findListener( Ptr ptr ){ for( iterator i=begin(); i!=end(); i++ ) if( *i == ptr ) return i; return end(); }
	ListenerManager::ListenerCIter ListenerManager::findListener( Ptr ptr ) const{ for( const_iterator i=begin(); i!=end(); i++ ) if( *i == ptr ) return i; return end(); }

	ListenerManager& ListenerManager::operator=( const ListenerManager& rk ){ mListeners = rk.mListeners; return *this; }
	
	void ListenerManager::clearListeners(){ mListeners.clear(); }
	size_t ListenerManager::listenersCount() const{ return MyType::size(); }
	bool ListenerManager::listenersEmpty() const{ return MyType::empty(); }
		
	ListenerManager::ListenerIter ListenerManager::beginListeners() { return MyType::begin(); }
	ListenerManager::ListenerIter ListenerManager::endListeners(){ return MyType::end(); }
	ListenerManager::ListenerCIter ListenerManager::beginListeners() const{ return MyType::begin(); }
	ListenerManager::ListenerCIter ListenerManager::endListeners() const{ return MyType::end(); }

};